using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.ObjectBuilder;
using GC2.ExceptionHandler;
using GC2.ExceptionHandler.Services;
using GC2.Entities.Admin;
using GC2.DataAccess;

namespace GC2.DataAccess.DAAdmin
{
    [Serializable]
    public class DAPrecios
    {
        private Database _database;        // Objeto DataBase del Data Access Application Block

        #region Propiedades miembro
        /// <summary>
        /// Seteo la propiedad _database de la clase.
        /// </summary>
        private Database DataBase
        {
            get { return _database; }
            set { _database = value; }
        }
        #endregion

        #region Constructor
        /// <summary>
        /// Contructor de la clase sin parametro. Crea un objeto DataBase
        /// del Data AppBlock tomando el defaultDatabase del app.config.
        /// </summary>
        //public AplicacionesDataAccess()
        //{
        //    this.DataBase = DatabaseFactory.CreateDatabase();
        //}
        #endregion

        #region DAPreciosInsert
        /// <summary>
        /// Inserta una Lista de Precio en la table Precios
        /// </summary>
        /// <param name="Connection"></param>
        /// <param name="Precios"></param>
        public void DAPreciosInsert(string Connection, Precios precio)
        {
            this.DataBase = DatabaseFactory.CreateDatabase(Connection);


            DbCommand cmd0 = DataBase.GetStoredProcCommand("ProximoId");
            try
            {
                using (cmd0)
                {
                    DataBase.AddInParameter(cmd0, "@tabla", DbType.String, "Precios");
                    DataBase.AddInParameter(cmd0, "@campo", DbType.String, "IdPrecios");
                    IDataReader Odbreader = DataBase.ExecuteReader(cmd0);
                    while (Odbreader.Read())
                    {
                        precio.IdPrecios = Convert.ToInt16(Odbreader["ID_IdPrecios"]);
                    }
                    Odbreader.Close();
                    Odbreader.Dispose();
                }
            }
            catch (SqlException sql_ex)
            {
                ExceptionSQL exNew = new ExceptionSQL();
                throw new System.Exception(exNew.exSQL(sql_ex.ToString()).ToString());
            }
            catch (Exception ex)
            {
                ExceptionDAL exNew = new ExceptionDAL();
                throw new System.Exception(exNew.exDAL(ex.ToString()).ToString());
            }

            DbCommand cmd = DataBase.GetStoredProcCommand("Precios_Insert");

            try
            {
                using (cmd)
                {
                    DataBase.AddInParameter(cmd, "@IdPrecios", DbType.Int64, precio.IdPrecios);
                    DataBase.AddInParameter(cmd, "@Nombre", DbType.String, precio.Nombre);
                    DataBase.AddInParameter(cmd, "@Fecha", DbType.DateTime, precio.Fecha);
                    DataBase.AddInParameter(cmd, "@FechaEstado", DbType.DateTime, precio.FechaEstado);
                    DataBase.AddInParameter(cmd, "@IdEstado", DbType.Int16, precio.IdEstado);
                    DataBase.AddInParameter(cmd, "@Estado", DbType.String, precio.Estado);
                    DataBase.AddInParameter(cmd, "@IdUsuario", DbType.Int16, precio.IdUsuario);

                    DataBase.ExecuteNonQuery(cmd);
                }
            }
            catch (SqlException sql_ex)
            {
                ExceptionSQL exNew = new ExceptionSQL();
                throw new System.Exception(exNew.exSQL(sql_ex.ToString()).ToString());
            }
            catch (Exception ex)
            {
                ExceptionDAL exNew = new ExceptionDAL();
                throw new System.Exception(exNew.exDAL(ex.ToString()).ToString());
            }
        }
        #endregion

        #region DAPreciosUpdate
        /// <summary>
        /// Actualiza Tabla Precios
        /// </summary>
        /// <param name="Connection"></param>
        /// <param name="Precios"></param>
        public void DAPreciosUpdate(string Connection, Precios precio)
        {
            this.DataBase = DatabaseFactory.CreateDatabase(Connection);
            DbCommand cmd = DataBase.GetStoredProcCommand("Precios_Update");

            try
            {
                using (cmd)
                {
                    DataBase.AddInParameter(cmd, "@IdPrecios", DbType.Int64, precio.IdPrecios);
                    DataBase.AddInParameter(cmd, "@Nombre", DbType.String, precio.Nombre);
                    DataBase.AddInParameter(cmd, "@Fecha", DbType.DateTime, precio.Fecha);
                    DataBase.AddInParameter(cmd, "@FechaEstado", DbType.DateTime, precio.FechaEstado);
                    DataBase.AddInParameter(cmd, "@IdEstado", DbType.Int16, precio.IdEstado);
                    DataBase.AddInParameter(cmd, "@Estado", DbType.String, precio.Estado);
                    DataBase.AddInParameter(cmd, "@IdUsuario", DbType.Int16, precio.IdUsuario);

                    DataBase.ExecuteNonQuery(cmd);
                }
            }
            catch (SqlException sql_ex)
            {
                ExceptionSQL exNew = new ExceptionSQL();
                throw new System.Exception(exNew.exSQL(sql_ex.ToString()).ToString());
            }
            catch (Exception ex)
            {
                ExceptionDAL exNew = new ExceptionDAL();
                throw new System.Exception(exNew.exDAL(ex.ToString()).ToString());
            }
        }
        #endregion

        #region DAPreciosGetAllByEstado
        /// <summary>
        /// Devuelve lista de Precios por Estado 
        /// </summary>
        /// <param name="Connection"></param>
        /// <param name="Precios"></param>
        /// <returns><List>Precios</List></returns>
        public List<Precios> DAPreciosGetAllByEstado(string Connection, Precios precio)
        {
            try
            {
                this.DataBase = DatabaseFactory.CreateDatabase(Connection);
                List<Precios> listaPrecios = new List<Precios>();

                if (precio.IdEstado == 0)  //  Esatado 1:Activo  2:Inactivo
                {
                    DbCommand cmd = DataBase.GetStoredProcCommand("Precios_GetAll");
                    using (cmd)
                    {
                        IDataReader Odbreader = DataBase.ExecuteReader(cmd);
                        while (Odbreader.Read())
                        {
                            Precios oPrecios = new Precios();

                            oPrecios.IdPrecios = Convert.ToInt16(Odbreader["IdPrecios"]);
                            oPrecios.Nombre = (string)Odbreader["Nombre"];
                            oPrecios.Fecha = (DateTime)Odbreader["Fecha"];
                            oPrecios.FechaEstado = (DateTime)Odbreader["FechaEstado"];
                            oPrecios.IdEstado = (int)(Odbreader["IdEstado"]);
                            oPrecios.Estado = (string)Odbreader["Estado"];
                            oPrecios.IdUsuario = (int)(Odbreader["IdUsuario"]);

                            listaPrecios.Add(oPrecios);
                        }
                        Odbreader.Close();
                        Odbreader.Dispose();
                    }
                }
                else
                {
                    DbCommand cmd = DataBase.GetStoredProcCommand("Precios_GetAllByEstado");
                    using (cmd)
                    {
                        if (precio.IdEstado > 0)  //  Esatado 1:Activo  2:Inactivo
                        {
                            DataBase.AddInParameter(cmd, "@IdEstado", DbType.Int16, precio.IdEstado);
                        }

                        IDataReader Odbreader = DataBase.ExecuteReader(cmd);
                        while (Odbreader.Read())
                        {
                            Precios oPrecios = new Precios();

                            oPrecios.IdPrecios = Convert.ToInt16(Odbreader["IdPrecios"]);
                            oPrecios.Nombre = (string)Odbreader["Nombre"];
                            oPrecios.Fecha = (DateTime)Odbreader["Fecha"];
                            oPrecios.FechaEstado = (DateTime)Odbreader["FechaEstado"];
                            oPrecios.IdEstado = (int)(Odbreader["IdEstado"]);
                            oPrecios.Estado = (string)Odbreader["Estado"];
                            oPrecios.IdUsuario = (int)(Odbreader["IdUsuario"]);

                            listaPrecios.Add(oPrecios);
                        }
                        Odbreader.Close();
                        Odbreader.Dispose();
                    }
                }
                
                return listaPrecios;
            }
            catch (SqlException sql_ex)
            {
                ExceptionSQL exNew = new ExceptionSQL();
                throw new System.Exception(exNew.exSQL(sql_ex.ToString()).ToString());
            }
            catch (Exception ex)
            {
                ExceptionDAL exNew = new ExceptionDAL();
                throw new System.Exception(exNew.exDAL(ex.ToString()).ToString());
            }
        }
        #endregion

        #region RptPrecios
        public List<Precios> RptPrecios(List<Precios> listaPrecios)
        {
            try
            {
                return listaPrecios;
            }
            catch (Exception ex)
            {
                ExceptionBM exNew = new ExceptionBM();
                throw new System.Exception(exNew.exBM(ex.ToString()).ToString());
            }
        }
        #endregion
    }
}